<script>
  //   假如有一排房子，共 n 个，每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种，你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。

  //   当然，因为市场上不同颜色油漆的价格不同，所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的正整数矩阵 costs 来表示的。

  //   例如，costs[0][0] 表示第 0 号房子粉刷成红色的成本花费；costs[1][2] 表示第 1 号房子粉刷成绿色的花费，以此类推。

  //   请计算出粉刷完所有房子最少的花费成本。

  //   来源：力扣（LeetCode）
  //   链接：https://leetcode.cn/problems/JEj789

  // 输入: costs = [[17,2,17],[16,16,5],[14,3,19]]
  // 输出: 10
  // 解释: 将 0 号房子粉刷成蓝色，1 号房子粉刷成绿色，2 号房子粉刷成蓝色。
  // 最少花费: 2 + 5 + 3 = 10。

  // 输入: costs = [[7,6,2]]
  // 输出: 2

  /**
   * 分析
   * 使其相邻的两个房子 颜色不相同 即 [17,2,17]与[16,16,5] costs
   * 推导一下公式
   * 取 costs[1][0]  那么 我取了 0  我与 [17,2,17] 相加 就只能是 2，17  不包含第0项 那么2,17 最小是 2
   * costs[1][0] + 2 -> 16 + 2 = 18
   * 取 costs[1][1]  那么 我取了 1  我与 [17,2,17] 相加 就只能是 17，17  不包含第1项 那么17,17 最小是 17
   * costs[1][1] + 17 -> 17 + 17 = 34
   * 取 costs[1][2]  那么 我取了 2  我与 [17,2,17] 相加 就只能是 17，2  不包含第2项 那么17,2 最小是 2
   * costs[1][2] + 2 -> 5 + 2 = 7
   * 总共 求得 三个结果 18 34 7  在取最小值即可得出 7
   * 这是两个数组情况下 如果 有多个数组
   * 那么即可得如下 算出 两个得总和 覆盖住原来的地方 然后 循环增加 保证了房子一定不是相邻 且根据三种情况都有总和
   * 得出如下 公式
   * costs[i][0] = Math.min(costs[i - 1][1], costs[i - 1][2]) + costs[i][0];
   * costs[i][1] = Math.min(costs[i - 1][0], costs[i - 1][2]) + costs[i][1];
   * costs[i][2] = Math.min(costs[i - 1][0], costs[i - 1][1]) + costs[i][2];
   * 取 i = 1 保存存放的值 和后面比较值 都是最新的值
   */

  /**
   * @param {number[][]} costs
   * @return {number}
   */
  var minCost = function (costs) {
    var n = costs.length;
    if (n === 1) return Math.min(costs[0][0], costs[0][1], costs[0][2]);
    for (var i = 1; i < n; i++) {
      // 第i个房子刷第一个颜色
      costs[i][0] = Math.min(costs[i - 1][1], costs[i - 1][2]) + costs[i][0]; // 18
      // 第i个房子刷第二个颜色
      costs[i][1] = Math.min(costs[i - 1][0], costs[i - 1][2]) + costs[i][1]; // 33
      // 第i个房子刷第三个颜色
      costs[i][2] = Math.min(costs[i - 1][0], costs[i - 1][1]) + costs[i][2]; // 7
    }
    return Math.min(Math.min(costs[i][0], costs[i][1], costs[i][2]));
    // lc 报错 就取  Math.min(costs[n-1][0], costs[n-1][1], costs[n-1][2])
  };

  console.log(minCost([[7, 6, 2]]));
</script>
